Ansible : Use Playbook#6
2015/04/22 |
This is the example of using the "Roles" function.
It's necessary to configure directory tree like follows to use Roles. To use Roles, it's possible to include other tasks or Playbooks without writing "include" sentence. The left image shows all tree, the right image shows an example of a Playbook on here. +--- playbook.yml +--- playbook_sample.yml | | +--- roles/ +--- roles/ | | +--- role01/ +--- ins_python_lib/ | | | +--- files/ | +--- vars/ | | | | +--- templates/ | | +--- main.yml | | +--- tasks/ +--- tasks/ | | | | +--- main.yml +--- handlers/ | | +--- ins_httpd/ +--- vars/ | | +--- files/ +--- defaults/ | | | | +--- index.html +--- meta/ +--- vars/ | | | +--- main.yml | +--- tasks/ | +--- main.yml |
[1] | For example, create a Playbook which install Python modules and httpd. |
[cent@dlp ~]$ mkdir -p roles/ins_python_lib/{tasks,vars} [cent@dlp ~]$ mkdir -p roles/ins_httpd/{files,tasks,vars}
[cent@dlp ~]$
vi playbook_sample.yml - hosts: target_servers become: yes become_method: sudo roles: - ins_python_lib - ins_httpd
[cent@dlp ~]$
vi roles/ins_python_lib/vars/main.yml setuptools: - python-setuptools py_pip: - pip py_libs: - httplib2
[cent@dlp ~]$
vi roles/ins_python_lib/tasks/main.yml - name: setuptools is installed yum: name="{{ item }}" state=installed with_items: - "{{ setuptools }}" tags: install_setuptools - name: pip is installed easy_install: name="{{ item }}" with_items: - "{{ py_pip }}" tags: install_pip - name: httplib2 are installed pip: name="{{ item }}" with_items: - "{{ py_libs }}" tags: install_httplib2
[cent@dlp ~]$
vi roles/ins_httpd/vars/main.yml packages: - httpd
[cent@dlp ~]$
vi roles/ins_httpd/tasks/main.yml - name: httpd is installed yum: name="{{ item }}" state=installed with_items: - "{{ packages }}" tags: install_httpd - name: edit httpd.conf lineinfile: > dest=/etc/httpd/conf/httpd.conf regexp="{{ item.regexp }}" line="{{ item.line }}" with_items: - { regexp: "^#ServerName", line: "ServerName {{ ansible_fqdn }}:80" } tags: edit_httpd.conf - name: httpd is running and enabled service: name=httpd state=started enabled=yes - name: put index.html copy: src=index.html dest=/var/www/html owner=root group=root mode=0644 - name: check httpd uri: url=http://"{{ ansible_fqdn }}"
[cent@dlp ~]$
[cent@dlp ~]$ echo "httpd index page" > roles/ins_httpd/files/index.html ansible-playbook playbook_sample.yml --ask-become-pass SUDO password: PLAY [target_servers] ********************************************************* GATHERING FACTS *************************************************************** ok: [10.0.0.51] ok: [10.0.0.52] TASK: [ins_python_lib | setuptools is installed] ****************************** ok: [10.0.0.51] => (item=python-setuptools) changed: [10.0.0.52] => (item=python-setuptools) TASK: [ins_python_lib | pip is installed] ************************************* ok: [10.0.0.51] => (item=pip) changed: [10.0.0.52] => (item=pip) TASK: [ins_python_lib | httplib2 are installed] ******************************* ok: [10.0.0.51] => (item=httplib2) changed: [10.0.0.52] => (item=httplib2) TASK: [ins_httpd | httpd is installed] **************************************** changed: [10.0.0.51] => (item=httpd) changed: [10.0.0.52] => (item=httpd) TASK: [ins_httpd | edit httpd.conf] ******************************************* changed: [10.0.0.51] => (item={'regexp': '^#ServerName', 'line': u'ServerName node01.srv.world:80'}) changed: [10.0.0.52] => (item={'regexp': '^#ServerName', 'line': u'ServerName node02.srv.world:80'}) TASK: [ins_httpd | httpd is running and enabled] ****************************** changed: [10.0.0.51] changed: [10.0.0.52] TASK: [ins_httpd | put index.html] ******************************************** changed: [10.0.0.52] changed: [10.0.0.51] TASK: [ins_httpd | check httpd] *********************************************** ok: [10.0.0.52] ok: [10.0.0.51] PLAY RECAP ******************************************************************** 10.0.0.51 : ok=9 changed=7 unreachable=0 failed=0 10.0.0.52 : ok=9 changed=7 unreachable=0 failed=0 |